<?php
class RotinaAmostra extends Zend_Db_Table
{
    protected $_name = "rotina_amostra";
 
    public function getRotinaAmostra(array $request)
    {
        $dados = array();
		
        $select = $this->select()
		       ->from($this, 'COUNT(*) AS qtd');
               
        $result = $this->fetchRow($select);
        
        if($result->qtd > 0){
            $total_pages = ceil($result->qtd / $request['rows']);
        }else{
            $total_pages = 0;
        }

        if($request['page'] == 1){
            $start = 0;
        }else{
            $start = ($request['rows'] * $request['page']) - $request['rows'];
        }

        $dados['total']	= $total_pages;
        $dados['page']	= $request['page'];
        $dados['records'] = $result->qtd;
        
        $select =  "SELECT DISTINCT ra.idAmostra, a.inicial,";
        $select .= " (SELECT COUNT( DISTINCT ra.idExame ) FROM rotina_amostra ra";
        $select .= " WHERE ra.idAmostra = a.idAmostra) AS TolExame";
        $select .= " FROM rotina_amostra ra";
        $select .= " INNER JOIN amostra a ON (a.idAmostra = ra.idAmostra)";
        $select .= " INNER JOIN rotina ro ON (ro.idRotina = ra.idRotina)";
        $select .= " WHERE ro.situacao_rotina = 'C'";
                
        if($request['sidx']){
            $select .= " ORDER BY " . $request['sidx']  . " " . $request['sord'] . " LIMIT " . $start ." , ". $request['rows'];
        }else{
            $select .=  " LIMIT " . $start ." , ". $request['rows'] ;
        }

        $resultado =  $this->_db->fetchAll($select);

        for ($cont = 0; $cont < count($resultado); $cont++)
        {
            $dados['rows'][$cont]['id'] =  $resultado[$cont]['idAmostra'];
            $dados['rows'][$cont]['cell'] =  array( $resultado[$cont]['idAmostra'],
                                                    $resultado[$cont]['inicial'],
                                                    $resultado[$cont]['TolExame']
                                                  );
        }
        return $dados;
    }

    public function vrfcLiberacaoAmostra($idAmostra)
    {
        $retorno = true;
        $select  = "select  count( distinct ra.idAmostra ) as Total";
        $select .= " from rotina r inner join rotina_amostra ra ";
        $select .= " on(r.idRotina = ra.idRotina)";
        $select .= " where r.situacao_rotina = 'L' ";
        $select .= $this->_db->quoteInto(" and idAmostra = ?)", $idAmostra);
        $resultado =  $this->_db->fetchRow($select);
        if($resultado->Total > 0)
        {
            $retorno = false;
        }
        
        return $retorno;
        
    }
    public function delAmostra($idAmostra)
    {
        $retorno = true;
        $select = "SELECT idRotina, COUNT( idAmostra ) AS Total";
        $select .= " FROM rotina_amostra";
        $select .= " WHERE idRotina IN (";
        $select .= " SELECT DISTINCT idRotina";
        $select .= " FROM rotina_amostra ra2";
        $select .= $this->_db->quoteInto(" WHERE idAmostra = ?)", $idAmostra);
        $select .= " GROUP BY idRotina";
        $select .= " HAVING COUNT( idAmostra ) = 1";

        $resultado =  $this->_db->fetchRow($select);
        
        $where = $this->_db->quoteInto("idAmostra = ?", $idAmostra);
	$result = $this->delete($where);
        if($result == 0){
            $retorno = false;
        }
        
        if($resultado['Total'] == 1)
        {
            $rotina = new Rotina();
            $resposta = $rotina->delRotina($resultado['idRotina']);
            if($resposta == 0){
                $retorno = false;
            }
        }
        return $retorno;
    }
    
    public function delRotinaAmostra($idRotina)
    {
        $where = $this->getAdapter()->quoteInto("idRotina = ?", $idRotina);
        return $this->delete($where);
    }
    
    public function delExaAmostra($idRotina, $idAmostra, $idExame)
    {
        $retorno = true;
        $this->_db->beginTransaction();
        try
        {
            $where = $this->_db->quoteInto("idAmostra = ?", $idAmostra);
            $where .= $this->_db->quoteInto(" AND idRotina = ?", $idRotina);
            $where .= $this->_db->quoteInto(" AND idExame = ?", $idExame);
            $this->delete($where);
            $this->_db->commit();
        }
        catch (Zend_Exception $e)
        {
            $this->_db->rollBack();
            $retorno = false;
        }
        return $retorno;
    }
    
    public function getKitSoroUtilizado($idRotina,$idAmostra,$idExame)
    {
        $select = " select distinct idKitSorologia ";
        $select .= " from rotina_amostra";
        $where  = $this->_db->quoteInto(" where idRotina = ?", $idRotina);
        $where  .= $this->_db->quoteInto(" and idAmostra = ?", $idAmostra);
        $where  .= $this->_db->quoteInto(" and idExame = ?", $idExame);
        $select .= $where;
        
        $resultado = $this->_db->fetchRow($select);
        
        return $resultado['idKitSorologia'];
        
    }
    public function getMetodologiaUtilizado($idRotina,$idAmostra,$idExame)
    {
         $select = " select distinct idMetodologia ";
        $select .= " from rotina_amostra";
        $where  = $this->_db->quoteInto(" where idRotina = ?", $idRotina);
        $where  .= $this->_db->quoteInto(" and idAmostra = ?", $idAmostra);
        $where  .= $this->_db->quoteInto(" and idExame = ?", $idExame);
        $select .= $where;
        
        $resultado = $this->_db->fetchRow($select);
        
        return $resultado['idMetodologia'];
    }
    public function existeAmostraRotina($idRotina,$idAmostra,$idExame)
    {
        $select = " select count(distinct idAmostra) qtde ";
        $select .= " from rotina_amostra";
        $where  = $this->_db->quoteInto(" where idRotina = ?", $idRotina);
        $where  .= $this->_db->quoteInto(" and idAmostra = ?", $idAmostra);
        $where  .= $this->_db->quoteInto(" and idExame = ?", $idExame);
        $select .= $where;
        
        $resultado = $this->_db->fetchRow($select);
        
        return $resultado['qtde'];
        
    }
    
    public function grid($idRotina, array $request)
    {
        $dados = array();
		
	$select = $this->select()
                       ->from($this, 'COUNT(*) AS  qtd')
                       ->where('idrotina = ?',$idRotina);
                 
        $result = $this->fetchRow($select);
	        
	if($result->qtd > 0){
            $total_pages = ceil($result->qtd / $request['rows']);
	}else{
            $total_pages = 0;
	}
		
	if($request['page'] == 1){
            $start = 0;
	}else{
            $start = ($request['rows'] * $request['page']) - $request['rows'];
	}

        $dados['total']	= $total_pages;
	$dados['page']	= $request['page'];
	$dados['records'] = $result->qtd;
        
        $select =  "SELECT DISTINCT ra.idExame, m.nome as metodologia, k.nome as kitSorologia,";
        $select .= " (SELECT e.nomeLongo FROM exame e ";
        $select .= "  WHERE ra.idExame = e.idExame) AS nome,";
        $select .= " (SELECT e.tiporesultado FROM exame e ";
        $select .= "  WHERE ra.idExame = e.idExame) AS resultado";
        $select .= " FROM rotina_amostra ra";
        $select .= " inner join metodologia m on (ra.idMetodologia = m.idMetodologia) ";
        $select .= "  inner join kitsorologia k on(ra.idKitSorologia = k.idKitSorologia) ";
        $where = $this->_db->quoteInto(" WHERE ra.idRotina = ?", $idRotina);
        $select .= $where;
        
        if($request['sidx']){
            $select .= " ORDER BY " . $request['sidx']  . " " . $request['sord'] . " LIMIT " . $start ." , ". $request['rows'];
	}else{
            $select .=  " LIMIT " . $start ." , ". $request['rows'] ;
	}
                
        $resultado =  $this->_db->fetchAll($select);
        
        for ($cont = 0; $cont < count($resultado); $cont++)
	{
            $dados['rows'][$cont]['id'] =  $resultado[$cont]['idExame'];
            $dados['rows'][$cont]['cell'] =  array( $resultado[$cont]['nome'],
                                                    $resultado[$cont]['resultado'],
            					    $resultado[$cont]['metodologia'],
						    $resultado[$cont]['kitSorologia']
						  );
	}
	return $dados;
    }
        
    public function subgrid($idExame, $idRotina, array $request)
    {
        $dados = array();
		
	$select = $this->select()
                       ->from($this, 'COUNT(*) AS  qtd')
                       ->where('idExame = ?',$idExame)                                
                       ->where('idrotina = ?',$idRotina);
        
        $result = $this->fetchRow($select);	
        
	if($result->qtd > 0){
            $total_pages = ceil($result->qtd / $request['rows']);
	}else{
            $total_pages = 0;
	}
		
	if($request['page'] == 1){
            $start = 0;
	}else{
            $start = ($request['rows'] * $request['page']) - $request['rows'];
	}

	$dados['total']	= $total_pages;
	$dados['page']	= $request['page'];
	$dados['records'] = $result->qtd;

	$select =  " SELECT ra.idAmostra, a.inicial, ";
        $select .=  "  CASE r.resposta";
	$select .=  " WHEN 'P' Then 'REAGENTE'";
	$select .=  " WHEN 'N' Then 'NÃO REAGENTE'";
	$select .=  " WHEN 'I' Then 'INDETERMINADO'";
	$select .=  " WHEN 'R' Then 'REPETIÇÃO'";
	$select .=  " END AS resposta,";
	$select .=  " r.valor1, r.valor2";
	$select .=  " FROM rotina_amostra ra";
	$select .=  " LEFT JOIN resultado r ON (ra.idAmostra = r.idAmostra AND ra.idRotina = r.idRotina AND ra.idExame = r.idExame)";
        $select .=  " INNER JOIN amostra a ON (ra.idAmostra = a.idAmostra)";
	$where = $this->_db->quoteInto(" WHERE ra.idExame = ?", $idExame);
        $and   = $this->_db->quoteInto(" AND ra.idRotina = ?", $idRotina);
        $select .= $where;
        $select .= $and;
        
        if($request['sidx']){
            $select .= " ORDER BY " . $request['sidx']  . " " . $request['sord'] . " LIMIT " . $start ." , ". $request['rows'];
	}else{
            $select .=  " LIMIT " . $start ." , ". $request['rows'] ;
	} 
                
        $resultado =  $this->_db->fetchAll($select);
             
        for ($cont = 0; $cont < count($resultado); $cont++)
	{
            $dados['rows'][$cont]['id'] =  $resultado[$cont]['idAmostra'];
            $dados['rows'][$cont]['cell'] =  array( $resultado[$cont]['idAmostra'],
                                                    $resultado[$cont]['inicial'],
                                                    $resultado[$cont]['resposta'],
                                                    $resultado[$cont]['valor1'],
                                                    $resultado[$cont]['valor2']
                                                  );
	}
	return $dados;
    }
}